// 定义模块的格式化字符串
#define pr_fmt(fmt) "%s:%s():%d: " fmt, KBUILD_MODNAME, __func__, __LINE__

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/delay.h>

static int print_num = 12;
module_param(print_num, int, 0644);
MODULE_PARM_DESC(print_num, "Number of print");

// 定义模块加载函数
static int __init pr_fmt_init(void)
{
	int i;

    pr_info("====printk模块加载成功！====\n");
    
	for (i = 0; i < print_num; i++) {
		pr_info_ratelimited("print count = %d\n", i);
		mdelay(100);
	}

    return 0; // 返回0表示模块加载成功
}

// 定义模块卸载函数
static void __exit pr_fmt_exit(void)
{
    pr_info("====printk模块卸载成功！====\n");
}

// 注册模块加载和卸载函数
module_init(pr_fmt_init);
module_exit(pr_fmt_exit);

// 模块信息
MODULE_LICENSE("GPL");
MODULE_AUTHOR("your_name");
MODULE_DESCRIPTION("pr_fmt内核模块示例");
MODULE_VERSION("0.1");
